package com.fjnu;

import com.fjnu.dao.UserDao;
import com.fjnu.dao.impl.UserDaoImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Properties;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; // 使用HikariCP连接池（轻量高效）

@Configuration
@ComponentScan("com.fjnu")
public class SpringConfig {

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        Properties props = new Properties();
        try {
            // 加载数据库配置
            props.load(getClass().getClassLoader().getResourceAsStream("db.properties"));
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 配置Hikari连接池（替代DriverManagerDataSource，更适合生产环境）
        HikariConfig config = new HikariConfig();
        config.setDriverClassName(props.getProperty("jdbc.driver"));
        config.setJdbcUrl(props.getProperty("jdbc.url"));
        config.setUsername(props.getProperty("jdbc.username"));
        config.setPassword(props.getProperty("jdbc.password"));

        // 连接池参数配置
        config.setMaximumPoolSize(10); // 最大连接数
        config.setMinimumIdle(5);      // 最小空闲连接
        config.setIdleTimeout(300000); // 空闲连接超时时间（5分钟）
        return new HikariDataSource(config);
    }

    // 直接注入数据源到DAO，不依赖JdbcTemplate
    @Bean
    public UserDao userDao(DataSource dataSource) {
        UserDaoImpl userDao = new UserDaoImpl();
        userDao.setDataSource(dataSource); // DAO通过数据源获取Connection
        return userDao;
    }
}